Texture is increasingly applied in a variety of computer graphics images and applications. Texture adds important visual information and surface detail. Texture increases the level of realism and immersion achievable for a given object or environment. Data representing a texture (also called a texture map or texel data) is often stored in texture memory in graphics hardware. During rendering, appropriate texel data is mapped to surfaces being rendered for display. See, e.g., the explanation of conventional texture mapping in Foley et al., Computer Graphics Principles and Practice, 2nd edition in C, Addison-Wesley Publishing Co.: Reading, Massachusetts 1996), pp. 741–744 (incorporated by reference herein).
Demand continues to grow for a wide range of larger and more complex textures. Textures such as satellite images, medical data, photographic images and other types of texture are used in many graphical applications. Large textures can easily exceed available texture memory. As a result, large textures may have to be stored in a larger texture database or other storage medium which are cheaper than texture memory but can not be accessed as quickly by a graphics or texture processor.
In many applications, users like to fly over or visualize aspects of texture data in real time. This is known as texture roaming. Texture roaming in real time becomes even more difficult or requires expensive graphics hardware with large texture memory as larger textures are used. For example, flight simulator applications must render frames in real time even when complex or voluminous source data, such as satellite images of the Earth or moon, are used as large texture motifs.
The problem of increasing texture size is further exacerbated in the case of mip-mapping where multiple copies of a texture image at different resolutions must also be stored. A mip-map consists of a texture pattern prefiltered at progressively lower or coarser resolutions and stored in varying levels of detail (LOD) maps. See, for instance, the examples of mip-mapping described in Foley et al., Computer Graphics Principles and Practice, 2nd edition in C, at pp. 826–828 and the article by C. Tanner et al., “The Clipmap: a Virtual Mipmap,” Computer Graphics Proceedings Annual Conference Series, 1998, pp. 151–158, especially section 3.1 (each of which is incorporated by reference herein). The benefit of mip-mapping is that filtering is only performed once on texel data when the mip-map is initially created and stored in a pyramid of LOD mip-maps. Thereafter, texels having a dimension commensurate with pixel size are obtained by selecting the closest LOD map having an appropriate resolution. By obtaining texels from pre-filtered LOD maps, filtering does not have to be performed during run time. Implementing a large texture mip-map quickly can become an expensive luxury since a large texture memory is needed to store the different pre-filtered LOD maps. Further, many portions of the stored mip-map are not used at a given display image.
Clip-map techniques have been developed to retain the benefits of pre-filtered multiple resolution texture storage while still allowing for fast access to relevant texel data in texture memory. A clip-map is a partial mip-map in which each level has been clipped to a specified size. The standard, full-size mip-map is stored in a host memory such as a database or other less expensive storage area. The clip-map, representing a subset of the complete mip-map and therefore requiring less memory, can be stored in texture memory which can be accessed quicker than the host memory or database. See, U.S. Pat. Nos. 5,760,783 and 6,417,860 issued to C. Migdal et al., and the article by C. Tanner et al., “The Clipmap: a Virtual Mipmap,” Computer Graphics Proceedings Annual Conference Series, 1998, pp. 151–158 (each of which is incorporated in its entirety herein by reference).
FIG. 1A is a diagram that shows a clip-map 100 of a larger complete mip-map 110. Clip-map 100 is an updateable representation of a partial mip-map of mip-map 130. As shown in FIG. 1A, finer resolution levels of clip-map 100 are clipped to a specified maximum size compared to complete mip-map 130. Clip-map 100 includes texel data at or near a clip center 105. For convenience, the texel data in each level of clip-map 100 is referred to as a “tile.”
The structure of clip map 100 is often thought of as having two parts, a clip-map pyramid 120 and clip-map stack 110 as shown in FIG. 1B. Clip-map pyramid 120 is made up of texel data in coarser resolution levels where an entire source texture map is included within each level. Clip-map stack 110 is made up of texel data in the finer resolution levels that have been clipped to avoid storage of texture of higher resolution texture data far from clip center eyepoint 105. For convenience, the maximum size of each level in clip-map 100 is referred to as the “clip size.” Clip-map 100 can be thought of then as a set of tiles made up of texel data corresponding to a source texture image filtered at different resolutions and clipped at a maximum clip size.
FIG. 2A is a diagram that illustrates how a 2K×2K clip-map 200 having clip-map stack 210 and clip-pyramid 220 can represent a 32K×32K source texture. Clip-map 200 has sixteen levels of detail (LOD) maps (also called tiles). Clip-map pyramid 220 has twelve tiles, each tile covering the entire portion of the source image but at progressively finer resolutions. Texel data in the levels in clip-map pyramid 220 ranges from 1×1 texels to 2048×2048 texels. Clip-map stack 210 has four tiles of 2048×2048 texels, but the texel data in each tile within clip-map stack 210 covers progressively clipped portions of the source image at finer resolutions near a viewer position or eyepoint as show in FIG. 2A. FIG. 2B is a further graphical illustration of how different clip-map levels can be arranged relative to a clip-map center. See, further discussion of conventional clip-mapping in the article by J. Montrym et al., InfiniteReality: A Real-Time Graphics System, Computer Graphics Proceedings, Annual Conference Series, published at SIGGRAPH, Los Angeles, Calif. 1997, pp. 293–302 (incorporated in its entirety herein by reference).
For texture roaming applications supported by clip-mapping, texel data is drawn from an appropriate level of detail within a clip-map cached in texture memory. The clip-map is centered about a clip center which can be an arbitrary texture space coordinate that defines the center of each clip-map level. Often the clip center is associated with an eye point in a graphical application. In this way, texture at the finest resolution can be provided near an eye point and coarser texture can be drawn from levels further away from the eye point. During texture roaming, an eye point can move sufficiently to require updating of the clip-map stack so that the texel data in the clip-map (especially the clip-map stack region) remains close to the eyepoint. One technique for updating a two-dimensional clip-map during texture roaming uses toroidal addressing. See, for instance, the example of updating and rendering with clip maps described in C. Tanner et al., “The Clipmap: a Virtual Mipmap,” at 151–158 (previously incorporated in its entirety herein by reference above).
Graphics applications have successfully used clip-mapping as described above, however, conventional approaches have required specialized graphics hardware designed to support clip-mapping. This has limited clip-mapping to machines having specialized graphic hardware that support clip-mapping, such as, InfiniteReality graphics hardware available from SGI, a Delaware Corp. See, J. Montrym et al., InfiniteReality: A Real-Time Graphics System, at 293–302 (previously incorporated in its entirety herein by reference above). Many graphics applications including texture roaming applications, however, are now being called upon to run on commodity graphics hardware. Such commodity graphics hardware may or may not support clip-mapping.
What is needed is a technique for texture roaming that can leverage clip-map techniques without requiring specialized graphics hardware. In particular, a method and system is needed for supporting texture roaming over large textures on commodity graphics hardware.